<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>01_异步代码-异步处理代码的困境</title>
</head>
<body>

  <script>

    // 1. 异步代码的困境
    // 1.1 回调地狱
    // 1.2 嵌套过深
    // 1.3 代码臃肿
    // 1.4 可读性差
    // 1.5 调试困难

    // 2. 设计异步函数
    function execAsyncCode(counter, successCallback, errorCallback) {
      // 异步任务
      setTimeout(() => { 
        if (counter > 0) { // counter可以计算的情况 
          let total = 0
          for (let i = 0; i < counter; i++) {
            total += i
          }
          // 在某一个时刻只需要回调传入的函数
          successCallback(total)
        } else {
          errorCallback('counter必须大于0')
        }
      }, 2000)
    }

    // 3. 调用异步函数
    execAsyncCode(10, (result) => {
      console.log('successCallback', result)
    }, (error) => {
      console.log('errorCallback', error)
    })

  </script>
  
</body>
</html>